# 导入llama_index的向量索引和文档类
from llama_index.core import VectorStoreIndex, Document

# 导入异步IO库
import asyncio

# 定义示例文本列表
sample_texts = [
    "批量查询可以同时处理多个查询请求。",
    "异步查询可以提高并发性能。",
    "批量处理适合处理大量查询任务。",
]

# 将每个示例文本包装为Document对象，生成文档列表
documents = [Document(text=text) for text in sample_texts]

# 基于文档列表创建向量索引
index = VectorStoreIndex.from_documents(documents)

# 创建异步查询引擎
async_query_engine = index.as_query_engine()


# 定义批量异步查询函数
async def batch_query(queries):
    """批量执行查询"""
    # 为每个查询创建异步任务
    tasks = [async_query_engine.aquery(query) for query in queries]
    # 并发执行所有查询任务并收集结果
    responses = await asyncio.gather(*tasks)
    # 返回所有查询结果
    return responses


# 定义要批量查询的问题列表
queries = ["什么是批量查询？", "异步查询有什么优势？", "批量处理适合什么场景？"]

# 执行批量查询并获取结果
print("执行批量查询...")
responses = asyncio.run(batch_query(queries))

# 遍历并输出每个查询及其对应的答案
for i, (query, response) in enumerate(zip(queries, responses)):
    print(f"\n查询 {i+1}: {query}")
    print(f"回答: {response}")